data MaybeList a = Scalar a | List [a]
	deriving(Show)

instance Functor MaybeList where
	fmap f (Scalar x) = Scalar (f x)
	fmap f (List x)   = List (map f x)
	
list :: a -> MaybeList a
--list x@(_:_) = List x  -- doesn't work cuz x is a list, so a must be type list, so MaybeList is applied to a list, which would require another list nesting in the List [x] branch
list x         = Scalar x